I agree with Bruce's post regarding a general File object. I implemented one again using a subclass of String. I then implemented a DirectoryTree object as a subclass of list. The list contains either File objects or other DirectoryTree objects. This retains the tree structure of the file system. The methods implemeted in DirectoryTree are the same as in File, so they appear much the same. I implemented methods for searching the tree for individual Files, or for groups using regular expressions or shell type wild cards.
I found this very! flexible, and it has appeared in many places in apps I have written.